<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // const p1 = new Promise((resolve,reject)=>{
        //     console.log("开始获取a信息");
        //     setTimeout(()=>{
        //         console.log('获取a信息成功');
        //         // resolve('小a真棒')
        //         reject('失败了 真可惜') // 只是改变了promise的状态 没有结束函数的运行
        //         console.log('你很棒');
        //     },3000)
        // })
        // console.log("p1", p1 );



        // Promise是个构造函数 有个参数为回调函数 回调函数有两个参数 resolve reject
        // resolve reject本质是函数 调用resolve函数把promise的状态由pending改为成功（fulfilled） 调用reject函数把promise的状态由pending变成失败状态（rejected）
        // Promise的实例化对象有两个属性
        //      -promisestate  当前promise实例化对象的状态
        //      -promiseresult  当前promise实例化对象的值
        // 只能将promise的状态由pending变成fulfilled或者rejected
        // resolve和reject只能改变promise的状态 不能结束函数的运行

        /*  try{
             调试代码块
         }catch(e){
             抓捕异常，并进行异常处理的代码块
         } */

        const p1 = new Promise((resolve, reject) => {
            console.log("开始获取a信息");

            try {
                throw new Error('真可惜 你错了') //抛出错误
                setTimeout(() => {
                    console.log('获取a信息成功');
                    resolve('小a真棒')
                }, 3000)
            } catch (e) {
                reject(e.message)
            }
        })
       


        // promist构造函数上有三个方法（同步绑定）
        //   -then方法：上面有两个参数 两个参数都为异步回调函数 第一个回调函数代表的是该异步操作成功后的执行的回调函数 第二个回调函数代表的是该异步操作失败之后执行的回调函数 两个参数接收的两个值分别为promise成功的值和promise失败的值

        // 调用then方法时 返回结果不为构造函数时 不管调用这个then方法的实例对象的结果为成功还是失败 该实例化对象对应的promise状态都为成功 promiseState:fulfilled 

        // 
       const p2 =  p1.then((value) => {
            throw new Error('出错啦')
            return new Promise((resolve, reject) => {
                console.log("开始获取b信息");
                try {
                    setTimeout(() => {
                        console.log("获取成功");
                        resolve({
                            name: "隔壁老王"
                        })
                    }, 3000)
                } catch (e) {
                    reject(e.message)
                }
            })
        })

       
        //   -catch方法 
       const p3 = p1.catch(reason => {
            return 1
        })

            console.log('p1',p1)
            console.log('p2',p2)
            console.log('p3',p3)
        
        //   -finally方法
    </script>
</body>

</html>